package com.demo.webapp.action;

import java.util.List;

import com.opensymphony.xwork2.validator.Validator;

/**
 * 客户端验证接口
 * 由于Struts2验证框架无法与前端合并，
 * 造成后端验证和前端验证两次开发问题。
 * 
 * 该接口为前端开发，提供验证所需的metadata数据
 * 这些数据可以为jquery.validate.js使用或其他前端js验证使用
 * @author ryuu.kk
 *
 */
public interface ClientValidateable {

	/**
	 * 返回验证的元数据信息,注意:当前页面必须与验证页面相同。
	 * @param url 数据递交的地址(用来判断使用哪些验证资源)
	 * @param field 验证字段,该字段与验证框架的配置文件(xxx-validation.xml)的验证字段相对应<br />
	 * &lt;field name="member.nickName"&gt;
	 * @return String 验证元数据
	 */
	String getValidateMetadata(String action, String field);
	
	/**
	 * 返回验证元数据
	 * 当前页面与验证的namespace不同时,使用该方法取得字段验证元数据
	 * <br />
	 * 如果form提交到/manage/User_uppass.action 
	 * <ul><li>namespace为 "/manage"</li>
	 * <li>action为 "User_uppass"</li></ul>
	 * @param namespace 验证所在的namespace,
	 * @param action
	 * @param field
	 * @return
	 */
	String getValidateMetadata(String namespace, String action, String field);
	
	/**
	 * 取得验证规则
	 * 返回的形式由内容分解器决定
	 * @return Object 验证规则
	 */
	Object getValidateRule();
	
	/**
	 * 评估数据提交地址的所有验证器
	 * @param url 提交的地址:/manage/User_uppass.action(内部地址,非url重写后的地址)
	 * @return List<Validator<?>> 所有验证器
	 */
	List<Validator<?>> evaluateValidator(String url);
}
